package com.muyu.payment.domain.req;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.experimental.SuperBuilder;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 支付回调请求
 *
 * @author muyu
 * @date 2025-09-18
 */
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "支付回调请求")
public class PaymentCallbackReq {

    /**
     * 订单号
     */
    @NotBlank(message = "订单号不能为空")
    @Schema(description = "订单号", required = true)
    private String orderNo;

    /**
     * 第三方交易号
     */
    @NotBlank(message = "第三方交易号不能为空")
    @Schema(description = "第三方交易号", required = true)
    private String thirdTradeNo;

    /**
     * 支付渠道
     */
    @NotBlank(message = "支付渠道不能为空")
    @Schema(description = "支付渠道", required = true)
    private String payChannel;

    /**
     * 支付金额
     */
    @NotNull(message = "支付金额不能为空")
    @Schema(description = "支付金额", required = true)
    private BigDecimal payAmount;

    /**
     * 支付时间
     */
    @NotNull(message = "支付时间不能为空")
    @Schema(description = "支付时间", required = true)
    private Date payTime;

    /**
     * 支付状态
     */
    @NotBlank(message = "支付状态不能为空")
    @Schema(description = "支付状态", required = true)
    private String payStatus;

    /**
     * 客户端IP
     */
    @Schema(description = "客户端IP")
    private String clientIp;

    /**
     * 支付类型
     */
    @Schema(description = "支付类型")
    private Integer payType;

    /**
     * 签名
     */
    @Schema(description = "签名")
    private String sign;

    /**
     * 备注
     */
    @Schema(description = "备注")
    private String remark;
}